package com.jackson.spring.beandemo.cycle;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

/**
 * bean 的后置处理器，允许调用初始化 方法前后对bean进行额外处理，
 * bean的后置处理器对ioc容器中的所有bean进行逐一处理，而非单一实例，其典型的应用是：检查bean属性的正确性或根据特定的标准更改bean属性
 * 
 * 对bean的后置处理器而言，需要实现BeanPostProcessor接口，在初始话方法被调用前后，
 * Spring 将把每个bean实例分别传递给上述接口的以下两个方法。
 * @author jackson
 *
 */
public class MyBeanPostProcessor implements BeanPostProcessor{

	public Object postProcessBeforeInitialization(Object bean, String beanName)
			throws BeansException {
		System.out.println("bean"+bean+","+"beanname:"+beanName);
		// 可以在此处对bean实例进行过滤返回有用的bean
		return bean;
	}

	public Object postProcessAfterInitialization(Object bean, String beanName)
			throws BeansException {
		System.out.println("bean"+bean+","+"beanname:"+beanName);
		//此处可以对bean进行处理，返回另一个bean
		Car car = (Car) bean;
		car.setStyle("宝马");
		return car;
	}

}
